package org.zht.dormpro.pub.util;

import org.joda.time.DateTime;

public class TimeUtil {
    private static final long dayM = 24 * 60 * 60 * 1000;
    private static final long hourM = 60 * 60 * 1000;
    private static final long secondM = 60 * 1000;

    /**
     * 年(yyyy)
     */
    public static final String YEAR = "yyyy";

    /**
     * 年-月(yyyy-MM)
     */
    public static final String YEAR_MONTH = "yyyy-MM";

    /**
     * 年-月-日(yyyy-MM-dd)
     */
    public static final String YEAR_MONTH_DAY = "yyyy-MM-dd";

    /**
     * 年月日(yyyyMMdd)
     */
    public static final String YEAR_MONTH_DAY_SIMPLE = "yyyyMMdd";

    /**
     * 年-月-日 小时(yyyy-MM-dd HH)
     */
    public static final String YEAR_MONTH_DAY_HOUR = "yyyy-MM-dd HH";

    /**
     * 年-月-日 小时(yyyy-MM-dd HH)中文输出
     */
    public static final String YEAR_MONTH_DAY_HOUR_CN = "yyyy年MM月dd日HH时";

    /**
     * 年-月-日 小时:分钟(yyyy-MM-dd HH:mm)
     */
    public static final String YEAR_MONTH_DAY_HOUR_MINUTE = "yyyy-MM-dd HH:mm";

    /**
     * 年-月-日 小时:分钟:秒钟(yyyy-MM-dd HH:mm:ss)
     */
    public static final String YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";

    /**
     * 年月日小时分钟秒钟(yyyyMMddHHmmss)
     */
    public static final String YEAR_MONTH_DAY_HOUR_MINUTE_SECOND_SIMPLE = "yyyyMMddHHmmss";

    /**
     * 小时:分钟:秒钟(HH:mm:ss)
     */
    public static final String HOUR_MINUTE_SECOND = "HH:mm:ss";

    /**
     * 小时:分钟(HH:mm)
     */
    public static final String HOUR_MINUTE = "HH:mm";


    /**
     * 获取时间差的字符串表示
     *
     * @param begin 开始时间
     * @param end   结束时间
     * @return 返回值
     */
    public static String getTimeSpan(long begin, long end) {
        long l = end - begin;
        long day = l / dayM;
        long hour = (l / hourM - day * 24);
        long min = ((l / secondM) - day * 24 * 60 - hour * 60);
        long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
        long ms = l - day * dayM - hour * hourM - min * secondM - s * 1000;
        StringBuffer stringBuffer = new StringBuffer();
        if (day > 0) {
            stringBuffer.append(day).append("天");
        }
        if (hour > 0) {
            stringBuffer.append(hour).append("小时");
        }
        if (min > 0) {
            stringBuffer.append(min).append("分钟");
        }
        if (s > 0) {
            stringBuffer.append(s).append("秒");
        }
        if (ms > 0) {
            stringBuffer.append(ms).append("毫秒");
        }
        return stringBuffer.toString();
    }

    /**
     * 获取当前时间距离多久
     */
    public static String getNowTimeSpan(long begin) {
        return getTimeSpan(begin, System.currentTimeMillis());
    }

    //获取本周开始时间
    public static long getWeekBegin() {
        return getDateOnly(DateTime.now()).dayOfWeek().withMinimumValue().getMillis();
    }

    /**
     * 获取只含有年月日的DateTime对象
     *
     * @param dateTime DateTime对象
     * @return 只含有年月日的DateTime对象
     */
    public static DateTime getDateOnly(DateTime dateTime) {
        return new DateTime(dateTime.toString(YEAR_MONTH_DAY));
    }

    //获取今天开始时间
    public static long getTimeDay() {
        return getDateOnly(DateTime.now()).getMillis();
    }

    //获取当前时间的表示
    public static String getStringTimeNow(String pattern) {
        return getStringTime(DateTime.now().getMillis(), pattern);
    }

    //获取当前时间的表示
    public static String getStringTimeNow() {
        return getStringTime(DateTime.now().getMillis(), YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
    }


    public static String getStringTime(long timestamp, String pattern) {
        return new DateTime(timestamp).toString(pattern);
    }

    /**
     * 获取字符串时间的长整形标识
     * @param date 字符串标识的时间
     * @return 返回时间戳
     */
    public static long getTimeMillis(String date){
        long millis = DateTime.parse(date).getMillis();
        return millis;
    }
}
